From 549aad081dd9b21f551edfdd16746de8a67aecf0 Mon Sep 17 00:00:00 2001 From: Ewan Mellor Date: Mon, 4 Dec 2006 13:57:18 +0000 Subject: [PATCH] Close the server when instructed, so that we can reload on the same port, and diagnose a server that fails to start. Signed-off-by: Ewan Mellor --- tools/python/xen/xend/server/XMLRPCServer.py | 40 +++++++++++++------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/tools/python/xen/xend/server/XMLRPCServer.py b/tools/python/xen/xend/server/XMLRPCServer.py index 45540995bd..c29b4b6bdd 100644 --- a/tools/python/xen/xend/server/XMLRPCServer.py +++ b/tools/python/xen/xend/server/XMLRPCServer.py @@ -16,6 +16,8 @@ # Copyright (C) 2006 XenSource Ltd. #============================================================================ +import errno +import socket import types import xmlrpclib from xen.util.xmlrpclib2 import UnixXMLRPCServer, TCPXMLRPCServer @@ -105,20 +107,25 @@ class XMLRPCServer: "; authentication has been disabled for this server." or ".") - if self.use_tcp: - log.info("Opening TCP XML-RPC server on %s%d%s", - self.host and '%s:' % self.host or - 'all interfaces, port ', - self.port, authmsg) - self.server = TCPXMLRPCServer((self.host, self.port), - self.hosts_allowed, - logRequests = False) - else: - log.info("Opening Unix domain socket XML-RPC server on %s%s", - self.path, authmsg) - self.server = UnixXMLRPCServer(self.path, self.hosts_allowed, - logRequests = False) - + try: + if self.use_tcp: + log.info("Opening TCP XML-RPC server on %s%d%s", + self.host and '%s:' % self.host or + 'all interfaces, port ', + self.port, authmsg) + self.server = TCPXMLRPCServer((self.host, self.port), + self.hosts_allowed, + logRequests = False) + else: + log.info("Opening Unix domain socket XML-RPC server on %s%s", + self.path, authmsg) + self.server = UnixXMLRPCServer(self.path, self.hosts_allowed, + logRequests = False) + except socket.error, exn: + log.error('Cannot start server: %s!', exn.args[1]) + ready = True + running = False + return # Register Xen API Functions # ------------------------------------------------------------------- @@ -177,6 +184,11 @@ class XMLRPCServer: def cleanup(self): log.debug("XMLRPCServer.cleanup()") + try: + self.server.socket.close() + except Exception, exn: + log.exception(exn) + pass def shutdown(self): self.running = False -- 2.30.2